This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 190041
Collapse All | Expand All

(-)a/maven.grammar/src/org/netbeans/modules/maven/navigator/POMModelVisitor.java (-24 / +24 lines)
Lines 46-52 Link Here
46
import java.awt.event.ActionEvent;
46
import java.awt.event.ActionEvent;
47
import java.beans.PropertyChangeEvent;
47
import java.beans.PropertyChangeEvent;
48
import java.beans.PropertyChangeListener;
48
import java.beans.PropertyChangeListener;
49
import java.io.IOException;
50
import java.lang.reflect.Method;
49
import java.lang.reflect.Method;
51
import java.util.ArrayList;
50
import java.util.ArrayList;
52
import java.util.Arrays;
51
import java.util.Arrays;
Lines 107-113 Link Here
107
import org.netbeans.modules.maven.model.pom.Scm;
106
import org.netbeans.modules.maven.model.pom.Scm;
108
import org.netbeans.modules.maven.model.pom.Site;
107
import org.netbeans.modules.maven.model.pom.Site;
109
import org.netbeans.modules.maven.model.pom.StringList;
108
import org.netbeans.modules.maven.model.pom.StringList;
110
import org.netbeans.modules.xml.xam.Model;
111
import org.openide.nodes.AbstractNode;
109
import org.openide.nodes.AbstractNode;
112
import org.openide.nodes.Children;
110
import org.openide.nodes.Children;
113
import org.openide.nodes.Node;
111
import org.openide.nodes.Node;
Lines 150-174 Link Here
150
    @Override
148
    @Override
151
    public void visit(Project target) {
149
    public void visit(Project target) {
152
        Project t = target;
150
        Project t = target;
153
        if (t != null && (!t.isInDocumentModel() || !t.getModel().getState().equals(Model.State.VALID))) {
154
            POMModel mdl = t.getModel();
155
            if (!mdl.getState().equals(Model.State.VALID)) {
156
                try {
157
                    mdl.sync();
158
                } catch (IOException ex) {
159
                    LOG.log(Level.INFO, null, ex);
160
                }
161
            }
162
            t = t.getModel().getProject();
163
        }
164
        //ordered by appearance in pom schema..
151
        //ordered by appearance in pom schema..
165
        POMQNames names = parent.getPOMQNames();
152
        POMQNames names = parent.getPOMQNames();
166
        try {
167
            checkChildString(names.MODELVERSION, NbBundle.getMessage(POMModelVisitor.class, "MODEL_VERSION"), t != null ? t.getModelVersion() : null);
153
            checkChildString(names.MODELVERSION, NbBundle.getMessage(POMModelVisitor.class, "MODEL_VERSION"), t != null ? t.getModelVersion() : null);
168
        } catch (IllegalStateException x) {
169
            LOG.log(Level.WARNING, "#190041: invalid model: {0}", x.toString());
170
            return;
171
        }
172
        checkChildString(names.GROUPID, NbBundle.getMessage(POMModelVisitor.class, "GROUPID"), t != null ? t.getGroupId() : null);
154
        checkChildString(names.GROUPID, NbBundle.getMessage(POMModelVisitor.class, "GROUPID"), t != null ? t.getGroupId() : null);
173
        checkChildString(names.ARTIFACTID, NbBundle.getMessage(POMModelVisitor.class, "ARTIFACTID"), t != null ? t.getArtifactId() : null);
155
        checkChildString(names.ARTIFACTID, NbBundle.getMessage(POMModelVisitor.class, "ARTIFACTID"), t != null ? t.getArtifactId() : null);
174
        if (count == 0 && t != null && t.getPackaging() != null) {
156
        if (count == 0 && t != null && t.getPackaging() != null) {
Lines 1471-1486 Link Here
1471
        private List<POMCutHolder> rescan(POMModelVisitor visitor) {
1453
        private List<POMCutHolder> rescan(POMModelVisitor visitor) {
1472
            try {
1454
            try {
1473
                Method m = POMModelVisitor.class.getMethod("visit", type); //NOI18N
1455
                Method m = POMModelVisitor.class.getMethod("visit", type); //NOI18N
1474
                POMModel[] models = parentHolder.getSource();
1456
                for (Object cut : parentHolder.getCutValues()) {
1475
                Object[] cuts = parentHolder.getCutValues();
1476
                for (int i = 0; i < cuts.length; i++) {
1477
                    Object cut = cuts[i];
1478
                    // prevent deadlock 185923
1479
                    if (cut != null && !type.isInstance(cut)) {
1457
                    if (cut != null && !type.isInstance(cut)) {
1480
                        LOG.log(Level.WARNING, "#185428: {0} is not assignable to {1}", new Object[] {cut, type});
1458
                        LOG.log(Level.WARNING, "#185428: {0} is not assignable to {1}", new Object[] {cut, type});
1481
                        continue;
1459
                        continue;
1482
                    }
1460
                    }
1483
                    synchronized (i < models.length ? models[i] : /*#192042*/new Object()) {
1461
                    if (cut instanceof POMComponent) {
1462
                        POMModel model = ((POMComponent) cut).getModel();
1463
                        if (model.startTransaction()) {
1464
                            try {
1465
                                if (!((POMComponent) cut).isInDocumentModel()) {
1466
                                    LOG.log(Level.WARNING, "#190041: entry of {0} is no longer valid, skipping", type.getSimpleName());
1467
                                    continue;
1468
                                }
1469
                                switch (model.getState()) {
1470
                                case VALID:
1471
                                    m.invoke(visitor, cut);
1472
                                    break;
1473
                                default:
1474
                                    LOG.log(Level.WARNING, "skipping invalid ({0}) model", model.getState());
1475
                                }
1476
                            } finally {
1477
                                model.endTransaction();
1478
                            }
1479
                        } else {
1480
                            LOG.warning("could not start transaction");
1481
                        }
1482
                    } else {
1483
                        // XXX is this even possible?
1484
                        m.invoke(visitor, cut);
1484
                        m.invoke(visitor, cut);
1485
                    }
1485
                    }
1486
                }
1486
                }

Return to bug 190041